package it.patterns.creational.prototype;

/**
 * Specify the kinds of objects to create using a prototypical instance, and
 * create new objects by copying this prototype.
 * 
 * Use the prototype pattern when:
 * <ul>
 * <li>a system should be independent of how its products are created, composed
 * and represented;</li>
 * <li>the classes to instantiate are specified at run-time</li>
 * <li>avoiding building a class hierarchy of factories that parallels the class
 * hierarchy of products</li>
 * </ul>
 * 
 * <img src="Prototype.jpg" alt="Pattern Structure"/>
 * 
 * @author Luca D'Onofrio
 * 
 * @category Creational Pattern
 * @see "Design Patterns - Element of Reusable Object Oriented Software (Gamma,Helm, Johnson, Vlissides)"
 * 
 * @version 1.0
 * 
 */
public abstract class Prototype {
	public abstract void setTime(int hr, int min, int sec);

	public abstract int getHours();

	public abstract int getMinutes();

	public abstract int getSeconds();

	public abstract Prototype cloneItself();
}
